﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Collections;
using IBatisNet.DataMapper;
using TumbaloSoft.Models;
using TumbaloSoft.Helpers.QueryObjects;

namespace TumbaloSoft.Helpers
{
    public class HelperCita
    {
        public static int insert(TumbaloSoft.Models.Cita cita)
        {
            Mapper.Instance().Insert("CitaInsert", cita);
            return 0;
        }

        public static Cita selectById(int id)
        {
            IList citas = Mapper.Instance().QueryForList("CitaSelectById", id);
            if (citas.Count == 0) return null;
            Cita cita = (Cita)(citas[0]);
            return cita;
        }

        static public int SiguienteCodigo()
        {
            return (int)Mapper.Instance().QueryForObject("CitaSiguienteCodigo", null);
        }

        static public IList selectAll()
        {
            return Mapper.Instance().QueryForList("CitaSelectAll", null);
        }

        //<!--EXISTE ALGUNA CITA PARA TAL FECHA TAL HORA Y TAL INMUEBLE?-->
        public static Boolean SePuedeRealizarCita(List<Vendedor> listaVendedores,DateTime prFecha, int hora, int idInmueble)
        {
            int cantVendedores = listaVendedores.Count;
            int cantTrabajanEsaFecha = 0;

            IList lista = Mapper.Instance().QueryForList("CitaSelectAll", null);//SELECT ALL
            //LISTA DE TODOS LAS CITAS CON EL INMUEBLE
            if (lista.Count == 0) return true;
            else 
            {
                for (int i = 0; i < lista.Count; i++)
                {
                    Cita cita = HelperCita.selectById(((Cita)lista[i]).prIdCita);
                    if ((cita.prHora == hora) && (prFecha.Date.Year == cita.prFecha.Date.Year) && (prFecha.Date.Month == cita.prFecha.Date.Month) &&
                        (prFecha.Date.Day == cita.prFecha.Date.Day) && (idInmueble == cita.prInmueble.prIdInmueble))
                    {
                        return false;
                    }
                    else if
                        ((cita.prHora == hora) && (prFecha.Date.Year == cita.prFecha.Date.Year) && (prFecha.Date.Month == cita.prFecha.Date.Month) &&
                        (prFecha.Date.Day == cita.prFecha.Date.Day) && (idInmueble != cita.prInmueble.prIdInmueble))
                    {
                        cantTrabajanEsaFecha++;
                        if (cantTrabajanEsaFecha == cantVendedores) return false;
                    }
                }
                if (cantTrabajanEsaFecha < cantVendedores) return true;
                return false;
            }
                        
            
        }

        public static int selectCountActivos()
        {
            return (int)Mapper.Instance().QueryForObject("CitaSelectCountActivos", null);
        }

        public static IList buscar(BusquedaCita citaBuscar)
        {

            return Mapper.Instance().QueryForList("CitaBuscar", citaBuscar);
        }

        public static void update(TumbaloSoft.Models.Cita cita)
        {
            Mapper.Instance().Update("CitaUpdate", cita);
        }


        public static Boolean PuedeVendedor(int IdV, DateTime fecha, int hora, int IdI, List<Vendedor> listaVendedores)
        {
            IList lista = Mapper.Instance().QueryForList("CitaSelectAll", null);//SELECT ALL
            int cantVendedores = listaVendedores.Count;
            int cant = 0;

            if (lista.Count == 0) return true;
            else
            {
                foreach (var ci in lista)
                {
                    Cita cita = HelperCita.selectById(((Cita)ci).prIdCita);
                    if (cita.prEstado == "APROBADO")//ACA YA HAY UN VENDEDOR ASIGNADO
                    {
                        if ((fecha.Date.Year == cita.prFecha.Date.Year) && (fecha.Date.Month == cita.prFecha.Date.Month) &&
                        (fecha.Date.Day == cita.prFecha.Date.Day) && (cita.prHora == hora) && (IdV==cita.prEmpleado.prIdVendedor))
                        {
                            return false;
                        }
                    }
                    else if (cita.prEstado == "PENDIENTE")//NO TIENE UN VENDEDOR ASIGNADO
                    {
                        if ((fecha.Date.Year == cita.prFecha.Date.Year) && (fecha.Date.Month == cita.prFecha.Date.Month) &&
                        (fecha.Date.Day == cita.prFecha.Date.Day) && (cita.prHora == hora))
                        {
                            cant++;
                            if (cant == cantVendedores) return false;
                        }
                    }

                }
                if (cant < cantVendedores) return true;
                else return false;
            }
            
        }


        public static int selectCountAprobado(int id)
        {
            return (int)Mapper.Instance().QueryForObject("CitaSelectCountAprobado", id);
        }


        public static IList buscarAprobado(BusquedaCita citaBuscar)
        {

            return Mapper.Instance().QueryForList("CitaBuscarAprobado", citaBuscar);
        }

        public static void updateEstado(TumbaloSoft.Models.Cita cita)
        {
            Mapper.Instance().Update("CitaUpdateEstado", cita);
        }
    }
}